#ifndef _DE_SHADER_H_
#define _DE_SHADER_H_
#include "PCH.h"
#include "DeVertexShader.h"
#include "DeDomainShader.h"
#include "DeHullShader.h"
#include "DePixelShader.h"
#include "DeGeometryShader.h"
#include "DeRenderResource.h"

namespace DeviousRenderer
{

enum EShaderType
{
	VERTEX_SHADER = 0,
	HULL_SHADER,
	DOMAIN_SHADER,
	GEOMETRY_SHADER,
	PIXEL_SHADER,
	COMPUTER_SHADER,
	SHADER_TYPE_NUM
};

class DeShader : public DeRenderResource
{
public:
	DeShader();
	virtual ~DeShader();
	virtual void SetEnvironment(){}
	virtual void Bind(){}
	virtual void SetParameter(){}

	void SetCompiledShader(ID3DBlob* compiledShader)
	{
		m_pCompiledShader = compiledShader;
	}

	DePixelShaderPtr		 GetPixelShader();
	DeVertexShaderPtr		 GetVertexShader();
	DeHullShaderPtr			 GetHullShader();
	DeDomainShaderPtr		 GetDomainShader();
	DeGeometryShaderPtr		 GetGeometryShader();
	DeComputeShaderPtr		 GetComputeShader();

public:

	ID3DBlob*					m_pCompiledShader;
};

}
#endif//_DE_SHADER_H_